[Contentful] 本文のMarkdownテキスト5万字制限に抵触した場合に考慮すること

[Contentful] 本文のMarkdownテキスト5万字制限に抵触した場合に考慮すること

Clock Icon2025.01.10

こんにちは。サービス開発室の武田です。

なにごとにも制限というものはあるものです。たとえば俳句は17文字(17音)、X(旧Twitter)は140文字[1]、そしてContentfulは50,000文字です。

DevelopersIOはCMSとしてContentfulを使用しています。そのためContentfulの制限内で記事を執筆する必要があります。さてその制限の中にLong text field: 50,000 Characters per fieldというものがあります。簡単に言えば記事の本文は5万字以内にしてね、ということになります。

https://www.contentful.com/developers/docs/technical-limits/

さて、実は私がある記事の執筆中に、この文字数制限に引っかかりました。

contentful-avoid-long-text-field-limits_1.png

Contentfulの文字数制限に抵触した場合、どういう対策を取ればいいのかを整理しておきます。

記事をリファクタリングして文字数を減らす

一番簡単なのは、もちろん文字数がオーバーしないように減らすことです。たとえば長い単語を短縮するなどです(Kubernetesをk8s、Internationalizationをi18nとか)。ひらがなを漢字にすることでも減らせるでしょう。

とはいえこの方法で減らせる文字数は高が知れています。ちょっとオーバーした、くらいならこれで解決できるでしょう。

ソースコードを外出し

文字数が一気に増える要因として考えられるものとしては、サンプルソースコードなどの掲載があります。インデントなどで大量のスペースが必要だったりするためしかたがないですね。この場合は、本文に直接ソースコードを書くのではなく、GitHubなど他の場所にソースコードを置き、記事では「コンテンツの埋め込み」をすることで一気に文字数を減らせます。

DevelopersIOではZenn記法がサポートされているため、次のような埋め込みが使用できます(記法例はZennのガイドから引用)。

GitHubの埋め込み。

# GitHubのファイルURLまたはパーマリンクだけの行(前後に改行が必要です)
https://github.com/octocat/Hello-World/blob/master/README

GitHub Gistの埋め込み。

@[gist](GistのページURL)

CodePenの埋め込み。

@[codepen](ページのURL)

https://zenn.dev/zenn/articles/markdown-guide

リッチテキストを利用

ほとんどの場合、前述の方法で解決できるはずです。しかしそれでもダメだった場合どうするか。制限回避手段としてリッチテキストを利用する方法があります。先ほど制限のページのリンクを張りましたが、その中に次の項目があります。

Rich text field: 200,000 Characters per field (field size cannot exceed a payload of 1MB)

そう、Markdownで書く場合は5万文字ですが、HTMLマークアップの場合は20万文字までOKなのです。変換は自前でする必要はありますが、背に腹は代えられません。文字数が抑えられない場合はこれを使いましょう。

ことの発端となった記事ですが、最終的に 97594文字 になりました。5万どころじゃないですよ!それをHTMLに変換すると 65209文字 になったため、リッチテキストの制限には引っかかりませんでした。

ちなみにMarkdownをHTMLに変換する方法ですが、Zenn記法の問題などもあるため、編集画面にあるConvert MD to HTML機能を使いました。5万字に収まるように何分割かして、それぞれをコピー&ペーストしながら変換という地道な作業です。

contentful-avoid-long-text-field-limits_2.png

それでもダメな場合

そこまでしてもダメな場合は記事を分割するしかありません。しかし文字数が問題で分割というのはできればやりたくないですね。工夫して納めたいものです。

まとめ

Contentfulの文字数制限に抵触した場合、執筆者としてできる方策を整理してみました。また知見が増えましたら追記します。それではよいContentfulライフを。

脚注
  1. 現在は有料プランだと長文ポスト可能。 ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.